package md;

import java.sql.*;
import java.util.HashMap;
import java.util.Map;

/**
 * La clase DiccionarioMD maneja los datos de la tabla Diccionario de la BDD.
 *
 * @author Enrico  Jimenez
 * @version 1.0
 */
public class DiccionarioMD {

    private int idPalabra;
    private String palabra;

    /**
     * Constructor vacio.
     * Settea los atributos a los valores por defecto
     */
    public DiccionarioMD() {
        this.idPalabra = -1;
        this.palabra = "";
    }

    /**
     * Inserta uan nuevo palabra a la BDD.
     *
     * @return Retorna TRUE si es que se realiza con exito el ingreso.
     */
    public boolean insertarPalabra() {
        boolean retorno = false;
        if (!this.palabra.equals("")) {
            String sql = "INSERT INTO \"Diccionario\" " +
                    "VALUES (" + DiccionarioMD.getCodigoPalabra() +
                    ", '" + this.palabra + "')";
            //System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                if (stmt.executeUpdate(sql) > 0) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return retorno;
    }

    /**
     * Modifica la palabra existente en la BDD.
     *
     * @return Devuelve TRUE si es que se modifica con exito la palabra.
     */
    public boolean modificarPalabra() {
        boolean retorno = false;
        if (!this.palabra.equals("") && this.idPalabra != -1) {
            String sql = "UPDATE \"Diccionario\" " +
                    "SET \"palabra\" = '" + this.palabra + "' " +
                    "WHERE \"idPalabra\" = " + this.idPalabra;
            //System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                if (stmt.executeUpdate(sql) > 0) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return retorno;
    }

    /**
     * Elimina una palabra existente en la BDD.
     *
     * @return Devuelve TRUE si es que se elimina con exito la palabra.
     */
    public boolean eliminarPalabra() {
        boolean retorno = false;
        if (this.idPalabra != -1) {
            String sql = "DELETE FROM \"Diccionario\" " +
                    "WHERE \"idPalabra\" = " + this.idPalabra;
            //System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                if (stmt.executeUpdate(sql) > 0) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return retorno;
    }

    /**
     * Metodo que permite obtener las palabras de la BDD.
     *
     * @return Devuelve una lista con las palabras disponibles de la BDD
     */
    public Map getPalabras() {
        Map<String, String> retorno = new HashMap<String, String>();
        String sql = "SELECT * FROM \"Diccionario\"";
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                retorno.put(rset.getString("idPalabra"), rset.getString("palabra"));
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

    /**
     * Calcula el idPalabra que corresponde en la BDD
     *
     * @return Devuelve un entero con el codigo que corresponde en la secuencia
     */
    public static int getCodigoPalabra() {
        int retorno = -1;
        String sql = "SELECT MAX(\"idPalabra\") + 1 " +
                "FROM \"Diccionario\"";
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                retorno = rset.getInt(1);
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

    /***************************************
     * Getters & Setters
     ***************************************/
    public int getIdPalabra() {
        return idPalabra;
    }

    public void setIdPalabra(int idPalabra) {
        this.idPalabra = idPalabra;
    }

    public String getPalabra() {
        return palabra;
    }

    public void setPalabra(String palabra) {
        this.palabra = palabra;
    }
}




